package database

import (
	"context"
	"database/sql"
	"fmt"
	"strings"

	"github.com/gogf/gf/v2/os/gcfg"
	_ "github.com/go-sql-driver/mysql"
)

var DB *sql.DB

// InitDB 初始化数据库连接
func InitDB() error {
	cfg := gcfg.Instance("configs/config.yaml")
	ctx := context.Background()

	// 获取数据库连接字符串
	dbLink := cfg.MustGet(ctx, "database.default.link", "").String()
	if dbLink == "" {
		return fmt.Errorf("数据库连接字符串未配置")
	}

	// 解析连接字符串
	parts := strings.Split(dbLink, ":")
	if len(parts) < 2 {
		return fmt.Errorf("数据库连接字符串格式错误")
	}

	// 提取驱动名称和DSN
	driver := parts[0]
	dsn := strings.Join(parts[1:], ":")

	// 连接数据库
	db, err := sql.Open(driver, dsn)
	if err != nil {
		return fmt.Errorf("连接数据库失败: %v", err)
	}

	// 测试连接
	if err := db.Ping(); err != nil {
		return fmt.Errorf("数据库连接测试失败: %v", err)
	}

	// 设置连接池参数
	db.SetMaxOpenConns(10)
	db.SetMaxIdleConns(5)

	DB = db
	return nil
}

// CloseDB 关闭数据库连接
func CloseDB() {
	if DB != nil {
		DB.Close()
	}
}